package gam.n1.areas;

import gam.n1.achievement.iAchievementManager;
import gam.n1.areas.impl.a.DefaultDefendVArea;
import gam.n1.be.Behavioral;
import gam.n1.ins.InsCreator;
import gam.n1.ins.Instance;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;

import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
import java.util.function.Function;

public interface Area extends BukkitArea, AreaMsg, AreaLife {
    Plugin plugin();
    Random random();
    void refresh();
    void leave(Player player);
    List<Entity> getEntitys();
    boolean playerInGame(Player player);
    boolean isEntityInArea(Entity entity);
    boolean join(Player player);
    boolean cI();
    boolean cD();
    iAchievementManager getAchievementManager();
    CompletableFuture<Area> aH(Player p);
    InsCreator getInsCreator();
    Area behaviorals(List<Behavioral> bl) throws Exception;
    Area instances(List<Instance> ins) throws DefaultDefendVArea.CanNotModifiedException;
    long currentTime();
    Map<String,Object> save();
}
